package net.zjitc.linearlist.impl;

import net.zjitc.linearlist.MyLinearList;

/**
 * 链表存储方式实现线性表
 * Created by Administrator on 2017/3/9.
 */

public class MyLinkList<E> implements MyLinearList<E>{
    /*定义一个变量引用，用来指向第一个结点，也就是找到这个链表*/
    private  Node<E> start;
    /*记录当前链表的结点的个数*/
    private  int size;
    //    添加元素：
    @Override
    public void add(E item) {
        if (start==null){
            start=new Node<E>(item,null);
        }else{
            Node<E> c=start;
            while (c.next!=null){
                c=c.next;
            }
            c.next=new Node<E>(item,null);
        }
        size++;
    }
    //    插入元素：
    @Override
    public boolean add(int i, E item) {
        Node<E> c;
        Node<E> p;
        if (i<0||i>size){
            return false;
        }
        Node<E> newnode=new Node<E>(item,null);
        //在空链表或第一个元素前插入第一个元素
        //如果i等于0，应该是增加到链表的最开始的位置
        //先把原链表连接到新结点的后面
        if (i==0){
            newnode.next=start;
            start=newnode;
            size++;
        }else {
            //单链表的两个元素间插入一个元素
            //使用两个变量p和c 分别记录要插入位置的前一个结点和后一个结点
            //使用循环，根据i的值定位p和c的位置
            //找到p和c的位置后，jiang7新结点插入两个结点之间
            c=start;
            p=null;
            int j=0;
            while (c!=null&&j<i){
                p=c;
                c=c.next;
                j++;
            }
            if (j==i){
                p.next=newnode;
                newnode.next=c;
                size++;
            }
        }
        return true;
    }
    //    删除元素：
    @Override
    public E remove(int i) {
        return null;
    }
    //    定位元素：
    @Override
    public int indexOf(E item) {
        return 0;
    }
    //    取表元素：
    @Override
    public E get(int i) {
        return null;
    }
    //    修改元素：
    @Override
    public void edit(int i, E item) {

    }
    //    求元素个数：
    @Override
    public int getSize() {
        return 0;
    }
    //    清空元素：
    @Override
    public void clear() {

    }
    //     判断表是否为空：
    @Override
    public boolean isEmpty() {
        return false;
    }
}
